package com.song.boot.springstudy.reference;

import com.song.boot.springstudy.entity.UserEntity;

import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

/**
 * 弱引用：触发gc的时候就会被回收
 */
public class WeakReferenceDemo {
    public static void main(String[] args) {
        //。。。一堆业务代码

        UserEntity a = new UserEntity();
        a.setId(12);
        a.setType("vip");
        a.setName("张三丰");
//。。业务代码使用到了我们的Worker实例

        // 使用完了a，将它设置为Weak 引用类型，并且释放强引用；
        WeakReference wr = new WeakReference(a);
        a = null;
//这个时候他是有可能执行一次GC的
        System.gc();

        // 下次使用时
         /*
        wr != null 说明 对象没有回收
        wr == null 说明 对象已被回收
         */
        if (wr != null) {
            a = (UserEntity) wr.get();
            System.out.println(a);
        } else {
            // 触发gc的时候就会被回收
            // 因此需要重新装载。
            a = new UserEntity();
            wr = new WeakReference(a);
        }
    }


}